package com.wing.productionPlan.dao;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wing.enterprise.product.model.entity.ResBenchmarkBookEchnology;
import com.wing.enterprise.product.model.entity.ResBenchmarkBookEchnologyQuality;
import com.wing.enterprise.product.model.response.ProductDetailVO;
import com.wing.productionPlan.model.entity.ProductionWorkOrder;
import com.wing.productionPlan.model.response.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 生产开工单-Dao
 *
 * @author
 */
@Mapper
public interface ProductionWorkOrderDao extends BaseMapper<ProductionWorkOrder> {

    /**
     * 列表-app
     *
     * @param params
     * @return
     */
    List<ProductionWorkOrderVO> list4app(@Param("params") Map<String, Object> params);

    /**
     * 分页列表-app
     *
     * @param page
     * @param params
     * @return
     */
    List<ProductionWorkOrderVO> list4app(@Param("page") Page<ProductionWorkOrderVO> page, @Param("params") Map<String, Object> params);

    /**
     * 详情-app
     *
     * @param id
     * @return
     */
    ProductionWorkOrderVO get4appById(@Param("id") Long id,@Param("workOrderCode") String workOrderCode);

    Page<ProductionWorkOrderVO> getProductionWorkOrderVOPageList(IPage<ProductionWorkOrderVO> page, @Param("ew") QueryWrapper<ProductionWorkOrder> queryWrapper);

    /**
     * 查询当前工单的上一条工单
     *
     * @param sort
     * @return
     */
    ProductionWorkOrder getUpWorkOrder(@Param("sort") Integer sort, @Param("deviceCode") String deviceCode);

    /**
     * 查询当前工单的下一条工单
     *
     * @param sort
     * @return
     */
    ProductionWorkOrder getNextWorkOrder(@Param("sort") Integer sort, @Param("deviceCode") String deviceCode);

    /**
     * 查询工单的计划信息
     *
     * @param id
     * @return
     */
    ProductionPlanVO getProductionPlanVOInfo(@Param("id") Long id);

    /**
     * 查询工单信息
     *
     * @param id
     * @return
     */
    ProductionPlanVO getWorkOrderInfo(@Param("id") Long id);

    /**
     * 查询工单的排产明细
     *
     * @param id
     * @return
     */
    List<ProductionWorkOrderVO> getProductionWorkOrderVOList(@Param("id") Long id);

    /**
     * 查询工单的物料明细
     *
     * @param processId * @param skuCode
     * @return
     */
    List<ProductionProcessMaterialVO> getProductionProcessMaterialVOList(@Param("processId") Long processId, @Param("skuCode") String skuCode, @Param("workOrderId") Long workOrderId);

    /**
     * @param workOrderId
     * @return
     */
    ProductionWorkOrderVO getWorkOrderDetails(@Param("workOrderId") Long workOrderId,@Param("workOrderCode") String workOrderCode);

    /**
     * 工站生产任务列表
     *
     * @param page         分页参数
     * @return
     */
    Page<ProductionWorkStationVO> getProductionWorkStationVOPageList(IPage<ProductionWorkStationVO> page);

    /**
     * 查询开工单信息
     * @param orderId
     * @return
     */
    ProductionWorkOrder getByInfoBy(@Param("orderId") Long orderId);

    /**
     * 查询工序id
     * @param workId
     * @return
     */
    Long getProcessIdForWork(@Param("workId") Long workId);

    /**
     * 查询当前开工单是否需要质检
     * @param workOrderId 开工单
     * @return
     */
    String getIsNeedQuality(@Param("workOrderId") Long workOrderId);

    /**
     * 查询质检性质
     * @param workOrderId
     * @return
     */
    String getQualityAttributes(@Param("workOrderId") Long workOrderId);

    /**
     * 查詢工序類型
     * @param workOrderId
     * @return
     */
    String getTypeLies(@Param("workOrderId") Long workOrderId);

    /**
     * 查询上一道工序的一些信息
     * @param orderId
     * @return
     */
    Map<String, Object> getUpOneInfo(@Param("orderId") Long orderId);

    /**
     * 基准书(解决feign)
     * @param bookId
     * @param processId
     * @return
     */
    List<ResBenchmarkBookEchnologyQuality> getQualityInfoBy(@Param("bookId") Long bookId,@Param("processId") Long processId);

    /**
     * 查询工序信息
     * @param processId
     * @return
     */
    ResBenchmarkBookEchnology getProcessInfoByProcessId(@Param("processId") Long processId);

    /**
     * 查询产品信息
     * @param skuCode
     * @return
     */
    ProductDetailVO getProductDetailBySkuCode(@Param("skuCode") String skuCode);

    /**
     * 查询基准书图纸信息
     * @param id
     * @return
     */
    List<DrawInfosVO> getDrawInfosBy(@Param("bookId") Long id);

    /**
     * 查询开工单信息
     * @param id
     * @return
     */
    List<ProductionWorkOrderInfoVo> getWorkOrderInfosBy(@Param("id") Long id);

    /**
     * 獲取工序信息
     * @param id 開工單id
      * @return
     */
    ProductionWorkOrderInfoVo getWorkOrderInfoAaaBy(@Param("id") Long id);

    /**
     *
     * @param bookId 基準數
     * @return
     */
    List<String> getDrawUrls(@Param("bookId") String bookId);

    /**
     * 获取末工序的报工数量
     * @param productionPlanRecordId
     * @return
     */
    Integer getLastReportInfoBy(@Param("productionPlanRecordId") Long productionPlanRecordId);
}
